package config

import (
	"fmt"
)

// AlertConfig 告警配置
type AlertConfig struct {
	Channels []AlertChannel `yaml:"channels"` // 告警通道配置
}

// AlertChannel 告警通道配置
type AlertChannel struct {
	Type     string       `yaml:"type"`                // 通道类型
	Robots   []WeComRobot `yaml:"robots,omitempty"`    // 企业微信机器人配置
	Webhook  string       `yaml:"webhook,omitempty"`   // 钉钉配置
	SMTPHost string       `yaml:"smtp_host,omitempty"` // 邮件配置
	SMTPPort int          `yaml:"smtp_port,omitempty"`
	Username string       `yaml:"username,omitempty"`
	Password string       `yaml:"password,omitempty"`
}

// WeComRobot 企业微信机器人配置
type WeComRobot struct {
	Name       string `yaml:"name"`        // 机器人名称
	Key        string `yaml:"key"`         // webhook key
	Secret     string `yaml:"secret"`      // 签名密钥(可选)
	RetryTimes int    `yaml:"retry_times"` // 重试次数
}

// Validate 验证告警配置
func (c AlertConfig) Validate() error {
	if len(c.Channels) == 0 {
		return fmt.Errorf("未配置警报通道")
	}

	for _, channel := range c.Channels {
		switch channel.Type {
		case "wecom":
			if len(channel.Robots) == 0 {
				return fmt.Errorf("企业微信渠道未配置有效机器人")
			}
			for _, robot := range channel.Robots {
				if robot.Key == "" {
					return fmt.Errorf("企业微信渠道未配置有效密钥")
				}
			}
		default:
			return fmt.Errorf("不支持的告警通道类型: %s", channel.Type)
		}
	}
	return nil
}
